<?php
/**
 * Class Results represents the database table 'Sooritus'.
 * It has functions to manipulate database objects.
 */
class Result {
	
	public function __construct( &$alt_sql = false){
		global $sql;
		if ($alt_sql==false){
			$this->sql=$sql;
		} else {
			$this->sql=&$alt_sql;
		}	
	}
	
	//returns the answers from a result
	public static function checkIfExists( $sql, $kasutaja, $kontrolltoo ) {
		//global $sql;
		$kasutaja = $kasutaja;
		$kontrolltoo = $kontrolltoo; 
		
		//sends query
		$query = "SELECT idsooritus FROM sooritus s 
			WHERE s.kasutaja = '".$kasutaja."' AND 
			s.kontrolltoo = '".$kontrolltoo."'
			ORDER BY algus DESC LIMIT 1";
		$result = $sql->selectQuery($query);
		
		//get the id of the created result
		if( count($result) == 0 ) {
			Result::start($sql, $kasutaja, $kontrolltoo);
		}
		
		// TODO tagasta select vastustest
		$query = "SELECT l.idlahendus, l.vastus, l.tagasiside, l.ulesanne, l.punktid, s.kasutaja
			FROM lahendus l
			INNER JOIN sooritus s
			ON l.sooritus=s.idsooritus
			WHERE s.kontrolltoo = ".$kontrolltoo." AND  s.kasutaja=".$kasutaja."
			ORDER BY l.idlahendus";
		$result = $sql->selectQuery($query);
		return $result;
		
	}
	
	//returns the id of the result
	public static function getId( $sql, $kasutaja, $kontrolltoo ){
		$query = "SELECT idsooritus FROM sooritus s 
			WHERE s.kasutaja = '".$kasutaja."' AND 
			s.kontrolltoo = '".$kontrolltoo."'
			ORDER BY algus DESC LIMIT 1";
		$result = $sql->selectQuery($query);
		return $result[0]['idsooritus']; 
	}
	
	/**
	 * Starts a new result
	 * When a student begins a test
	 *
	 * @return boolean
	 */
	public static function start($sql, $kasutaja, $kontrolltoo) {
		//global $sql;
		//sends query
		$query = "INSERT INTO sooritus ( kasutaja, algus, kontrolltoo) 
			VALUES ( '".$kasutaja."', NOW(), '".$kontrolltoo."')";
		
		
		if( $sql->query($query) ) {
			return true;
		}
		return false;
	}
	
	
	
	
	/**
	 * Deletes a result.
	 *
	 * @param integer $id
	 * @return boolean
	 */
	public function delete($sql, $idsooritus) {
		//global $sql;
		$query = "DELETE FROM sooritus s
			WHERE s.idsooritus = ".$idsooritus." 
			LIMIT 1";
		
		if( $this->sql->query($query) ) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * Gets all results from the database.
	 * @return array
	 */
	public static function loadAll($sql) {
		//global $sql;
		$query = "SELECT s.idsooritus, s.hinnatud, k.matrikkel, k.perenimi, k.eesnimi, kt.kt_nimi, s.lopp, s.tulemus
			FROM sooritus s, kasutajad k, kontrolltoo kt
			WHERE s.kasutaja = k.idkasutaja
			AND s.kontrolltoo = kt.idkontrolltoo
			ORDER BY kt.kt_nimi";
		
		return $sql->selectQuery( $query );
	
	}
	
	//load results of currently logged in user
	public static function loadActiveUserResults($sql) {
			//global $sql;
			$query = "SELECT s.hinnatud, s.idsooritus, k.matrikkel,
			 k.perenimi, k.eesnimi, kt.kt_nimi, s.lopp, s.tulemus
			FROM sooritus s, kasutajad k, kontrolltoo kt
			WHERE s.kasutaja = k.idkasutaja
			AND s.kasutaja = ".$_SESSION['userId']."
			AND s.hinnatud = 1
			AND s.kontrolltoo = kt.idkontrolltoo
			ORDER BY kt.kt_nimi";
			
			return $sql->selectQuery( $query );
		
	}
	//load results of specified user
	public static function loadUserResults($sql, $userId) {
			//global $sql;
			$query = "SELECT s.hinnatud, s.idsooritus, k.matrikkel, 
				k.perenimi, k.eesnimi, kt.kt_nimi, s.lopp, s.tulemus
				FROM sooritus s, kasutajad k, kontrolltoo kt
				WHERE s.kasutaja = k.idkasutaja
				AND s.kasutaja = ".$userId."
				AND s.hinnatud = 1
				AND s.kontrolltoo = kt.idkontrolltoo
				ORDER BY kt.kt_nimi";
			
			return $sql->selectQuery( $query );
		
	}
	
	//load data of the result
	public static function loadResult($sql, $resultId) {
			//global $sql;
			$query = "SELECT u.idulesanne, l.idlahendus, l.sooritus, l.vastus AS pakkumine, l.punktid, l.tagasiside, u.tekst, u.vastus, u.vastus2, u.vastus3, u.maks_punkte, u.argumendid
				FROM lahendus l, sooritus s, ulesanne u
				WHERE l.sooritus = s.idsooritus
				AND l.ulesanne = u.idulesanne
				AND s.idsooritus = '".$resultId."'
				ORDER BY u.idulesanne";
			
			$result = $sql->selectQuery( $query );
			if(!empty($result)){
				return $result;
			} else return false;
			
		
	}
	
	//load data of the result
	public static function loadPoints($sql, $resultId) {
			//global $sql;
			$query = "SELECT SUM(punktid) as summa FROM lahendus WHERE sooritus='".$resultId."'";
			
			return $sql->selectQuery( $query );
		
	}
	
	/**
	 * Grade result
	 */
	public static function gradeResult($sql, $resultId, $sum) {
		//global $sql;
		$query="UPDATE sooritus s SET s.hinnatud = '1',
			s.tulemus = '".$sum."' 
			WHERE s.idsooritus = '".$resultId."' LIMIT 1";
		$result = $sql->query($query);
		//return $result;
		if( !($sql->affectedRows() == 1) ) {
			//check if maybe the data that is being set is already set in the db 
			$query = "SELECT * FROM sooritus s WHERE s.hinnatud = '1' AND
			s.tulemus = '".$sum."' 
			AND s.idsooritus = '".$resultId."' LIMIT 1";
			$sql->query($query);
			if(count($sql->selectQuery($query))==1){
					return true;
					} else return false;
		} else return true;
	}
	
	/**
	 * End result
	 */
	public static function endResult($sql, $resultId) {
		//global $sql;
		$query="UPDATE sooritus s SET s.lopetatud = '1', s.lopp = NOW()
			WHERE s.idsooritus = '".$resultId."' LIMIT 1";
		$result = $sql->query($query);
		//return $result;
		if( !($sql->affectedRows() == 1) ) {
			//check if maybe the data that is being set is already set in the db 
			$query = "SELECT * FROM sooritus s WHERE s.hinnatud = '1'
			AND s.idsooritus = '".$resultId."' LIMIT 1";
			$sql->query($query);
			if(count($sql->selectQuery($query))==1){
					return true;
					} else return false;
		} else return true;
	}
	
}
?>
